package com.llb666.java.leetcode;

import java.util.Arrays;

/**
 * 「句子」是一个用空格分隔单词的字符串。给你一个满足下述格式的句子 text :
 *      句子的首字母大写
 *      text 中的每个单词都用单个空格分隔。
 * 请你重新排列 text 中的单词，使所有单词按其长度的升序排列。如果两个单词的长度相同，则保留其在原句子中的相对顺序。
 *
 * 请同样按上述格式返回新的句子。
 * Created by 斌~
 * 2021/3/11 17:36
 */
public class LeetCode1451 {

    /**
     * 示例一：
     *  输入：text = "Leetcode is cool"
     *  输出："Is cool leetcode"
     *  解释：句子中共有 3 个单词，长度为 8 的 "Leetcode" ，长度为 2 的 "is" 以及长度为 4 的 "cool" 。
     *  输出需要按单词的长度升序排列，新句子中的第一个单词首字母需要大写。
     *
     * 示例二：
     *  输入：text = "Leetcode is cool"
     * 输出："Is cool leetcode"
     * 解释：句子中共有 3 个单词，长度为 8 的 "Leetcode" ，长度为 2 的 "is" 以及长度为 4 的 "cool" 。
     * 输出需要按单词的长度升序排列，新句子中的第一个单词首字母需要大写。
     *
     * 示例三：
     *  输入：text = "To be or not to be"
     *  输出："To be or to be not"
     * @param text 要输入的句子
     * @return 重新排序的句子
     */
    public static String arrangeWords(String text) {
        //定义输出的句子
        StringBuilder outPut = new StringBuilder();
        String[] s = text.toLowerCase().split(" ");

        for (int i = 0; i < s.length-1; i++) {
            for (int j = 0; j <s.length-i-1 ; j++) {
                if(s[j].length()>s[j+1].length()){
                    String temp ="";
                    temp =s[j+1];
                    s[j+1]=s[j];
                    s[j]=temp;
                }
            }
        }
        s[0] =s[0].substring(0,1).toUpperCase()+s[0].substring(1);
        for (String s1 : s) {
            outPut.append(s1);
            outPut.append(" ");
        }
        return outPut.toString().trim();
    }

    /**
     * 提交给leetcode 效率比上面的强
     * @param text
     * @return
     */
    public static String arrangeWords2(String text) {
        String[] t =text.toLowerCase().split(" ");
        Arrays.sort(t,(s1,s2)->{return s1.length()-s2.length();});
//        Arrays.sort(t, Comparator.comparingInt(String::length));
        StringBuilder ans= new StringBuilder();
        for(String a:t){
            ans.append(a).append(" ");
        }
        return (ans.substring(0,1).toUpperCase()+ans.substring(1)).trim();
    }
    public static void main(String[] args) {
        System.out.println(arrangeWords2("Leetcode is cool"));;
    }
}
